package com.zzuli.yxy.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzuli.yxy.entity.Employee;
import com.zzuli.yxy.result.R;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @auther pony
 * @create 2023-03-05 14:42
 */
public interface EmployeeService extends IService<Employee> {
    /**
     * 获取验证码
     *
     * @param request
     * @param response
     */
    void getVerifyCode(HttpServletRequest request, HttpServletResponse response);

    /**
     * 登录方法
     *
     * @param employee   封装前端传来的用户名和密码
     * @param verifyCode 验证码
     * @return
     */
    R login(Employee employee, String verifyCode, HttpServletRequest request);

    /**
     * 登出
     *
     * @return
     */
    R logout();

    /**
     * 根据token获取员工信息
     *
     * @param request
     * @return
     */
    R getEmployeeInfoByToken(HttpServletRequest request);

    /**
     * 获取菜单列表信息
     *
     * @param request
     * @return
     */
    R getMenuList(HttpServletRequest request);

    /**
     * 获取员工管理分页列表信息
     * @param pageCurrent 当前页码
     * @param pageSize    每页条数
     * @param name        查询关键字
     * @return
     */
    R getPage(Integer pageCurrent, Integer pageSize, String name);

    /**
     * 更改员工当前状态
     * @param id 要修改的用户id
     * @param status 状态码 0：正常 1：异常
     * @return
     */
    void setStatus(Integer id, Integer status);

    /**
     * 上传头像
     * @param file
     * @param request
     * @return
     */
    R uploadImage(MultipartFile file, HttpServletRequest request);

    /**
     * 获取员工角色名称
     * @param request
     * @return
     */
    R getRoleNameByEmployeeId(HttpServletRequest request);

    /**
     * 修改员工信息
     * @param employee
     * @return
     */
    R updateEmployee(Employee employee);

    /**
     * 根据用户id修改用户密码
     * @param originalPassword 用户原始密码
     * @param password 密码
     * @param request
     * @return
     */
    R updateEmployeePasswordById(String originalPassword, String password, HttpServletRequest request);

    /**
     * 添加员工
     * @param employee
     * @return
     */
    R addEmployee(Employee employee);

    /**
     * 根据员工id，删除员工id
     * @param id
     * @return
     */
    R deleteEmployeeById(Integer id);

    /**
     * 批量删除
     * @param ids 员工 id数组
     * @return
     */
    R deleteEmployeeBatch(List<Integer> ids);

    /**
     * 根据员工id，查询单个员工数据
     * @param id
     * @return
     */
    R selectOneById(Integer id);

    /**
     * 员工信息 -- 导出 Excel
     * @param response
     */
    void outExcel(HttpServletResponse response);

    /**
     * 导入 Excel
     * @param file
     */
//    void inExcel(MultipartFile file);

    /**
     * 为 员工添加角色
     * @param id 待添加的员工id
     * @param roleIds 添加的角色id数组
     * @return
     */
    R addRoleForEmployee(Integer id, List<Integer> roleIds);


}
